#ifndef INCLUDE_SENSEID_IDS_ERROR_H_
#define INCLUDE_SENSEID_IDS_ERROR_H_

typedef int SENSEID_IDS_ERROR;

#define BI_ERR_PACK(lib, module, reason)                                                       \
  ((int)(0x80000000 | ((unsigned int)(lib)&0x7FF) << 20 | ((unsigned int)(module)&0xF) << 16 | \
         ((unsigned int)(reason)&0xFFFF)))

#define BI_ERR_LIB(error_code) ((unsigned int)(error_code) >> 20 & 0x7FF)

#define BI_ERR_MODULE(error_code) ((unsigned int)(error_code) >> 16 & 0xF)

#define BI_ERR_REASON(error_code) ((unsigned int)(error_code)&0xFFFF)

#define BI_GLOBAL_LIB 0x7FF
#define BI_GLOBAL_MODULE 0xF

#define BI_CONNECTION_MODULE 0xE
#define BI_DETECT_MODULE 0xD

#define BI_E_HANDLE BI_ERR_PACK(BI_GLOBAL_LIB, BI_GLOBAL_MODULE, 0xFFFF)                            // -1
#define BI_E_INVALID_ARGUMENT BI_ERR_PACK(BI_GLOBAL_LIB, BI_GLOBAL_MODULE, 0xFFFE)                  // -2
#define BI_E_UNSAFE_ENVIRONMENT BI_ERR_PACK(BI_GLOBAL_LIB, BI_GLOBAL_MODULE, 0xFFFD)                // -3
#define BI_E_CONNECTION_FAIL BI_ERR_PACK(BI_GLOBAL_LIB, BI_CONNECTION_MODULE, 0xFFFF)               // -65537
#define BI_E_CONNECTION_AUTH_INVALID BI_ERR_PACK(BI_GLOBAL_LIB, BI_CONNECTION_MODULE, 0xFFFE)       // -65538
#define BI_E_DETECT_EXCEPTION BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFF)                  // -131073
#define BI_E_DETECT_TIMEOUT BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFE)                    // -131074
#define BI_E_DETECT_UNSUPPORTED BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFD)                // -131075
#define BI_E_DETECT_NO_FACE BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFC)                    // -131076
#define BI_E_DETECT_MULTIPLE_FACES BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFB)             // -131077
#define BI_E_DETECT_FACE_NOT_IN_ROI BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFFA)            // -131078
#define BI_E_DETECT_FACE_TOO_SMALL BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF9)             // -131079
#define BI_E_DETECT_FACE_LOW_QUALITY BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF8)           // -131080
#define BI_E_DETECT_FACE_OCCLUSION BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF7)             // -131081
#define BI_E_DETECT_FACE_NOT_FORWARD BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF6)           // -131082
#define BI_E_DETECT_NO_ID_CARD BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF5)                 // -131083
#define BI_E_DETECT_MULTIPLE_ID_CARDS BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF4)          // -131084
#define BI_E_DETECT_ID_CARD_NOT_IN_ROI BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF3)         // -131085
#define BI_E_DETECT_ID_CARD_TOO_SMALL BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF2)          // -131086
#define BI_E_DETECT_ID_CARD_NOT_ALIGNED BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF1)        // -131087
#define BI_E_DETECT_ID_CARD_NOT_REQUIRED_SIDE BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFF0)  // -131088
#define BI_E_DETECT_ID_CARD_NOT_ORIGINAL BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFEF)       // -131089
#define BI_E_DETECT_ID_CARD_OCCLUSION BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFEE)          // -131090
#define BI_E_DETECT_ID_CARD_BRIGHT BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFED)             // -131091
#define BI_E_DETECT_ID_CARD_DARK BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFEC)               // -131092
#define BI_E_DETECT_ID_CARD_BLUR BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFEB)               // -131093
#define BI_E_DETECT_ID_CARD_CROPPED BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFEA)            // -131094
#define BI_E_DETECT_ID_CARD_FIELD_INVALID BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE9)      // -131095
#define BI_E_DETECT_ID_CARD_TURN_SIDE BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE8)          // -131096
#define BI_E_DETECT_NO_BANK_CARD_DETECTED BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE7)      // -131097
#define BI_E_DETECT_MULTIPLE_BANK_CARDS BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE6)        // -131098
#define BI_E_DETECT_BANK_CARD_NOT_IN_ROI BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE5)       // -131099
#define BI_E_DETECT_BANK_CARD_TOO_SMALL BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE4)        // -131100
#define BI_E_DETECT_BANK_CARD_FIELD_INVALID BI_ERR_PACK(BI_GLOBAL_LIB, BI_DETECT_MODULE, 0xFFE3)    // -131101
#define BI_OK 0

#endif  // INCLUDE_BELT_IDS_ERROR_H_
